# $Id: Makefile 9120 2006-08-28 13:01:07Z vlad $

all:
.PHONY: all user install_user install clean clean_user
.PHONY: libibverbs libmthca libibcm perftest mstflint libsdp libibcommon libibumad libibmad osm diags
.PHONY: librdmacm install_librdmacm dapl dat tvflash install_tvflash
.PHONY: install_libibverbs install_libmthca install_libibcm install_libsdp libibcommon
.PHONY: libipathverbs install_libipathverbs libehca install_libehca 
.PHONY: libcxgb3 install_libcxgb3
.PHONY: install_libibumad install_libibmad install_osm install_diags install_mstflint install_perftest
.PHONY: srptools install_srptools ipoibtools install_ipoibtools qlvnictools install_qlvnictools
.PHONY: sdpnetstat install_sdpnetstat
	
.DELETE_ON_ERROR:

include ./configure.mk.user

SRC	= src/
	
src_diags_LDADD="../libibcommon/libibcommon.la ../libibumad/libibumad.la ../libibmad/libibmad.la"
src_diags_DEPENDENCIES=

configure.mk.user:
	@echo Please run ./configure
	@exit 1

all: user 

install: install_user 

#########################
#	user level	#
#########################
ifeq ($(WITH_IBVERBS),yes)
user:	libibverbs
install_user:	install_libibverbs
endif

ifeq ($(WITH_MTHCA),yes)
user:	libmthca
install_user:	install_libmthca
endif

ifeq ($(WITH_IPATHVERBS),yes)
user:	libipathverbs
install_user:	install_libipathverbs
endif

ifeq ($(WITH_EHCA),yes)
user:	libehca
install_user:	install_libehca
endif

ifeq ($(WITH_CXGB3),yes)
user:	libcxgb3
install_user:	install_libcxgb3
endif

ifeq ($(WITH_CM),yes)
user:	libibcm
install_user:	install_libibcm
endif

ifeq ($(WITH_PERFTEST),yes)
user:	perftest
install_user:	install_perftest
endif

ifeq ($(WITH_SRPTOOLS),yes)
user:	srptools
install_user:	install_srptools
endif

ifeq ($(WITH_QLVNICTOOLS),yes)
user:	qlvnictools
install_user:	install_qlvnictools
endif

ifeq ($(WITH_IPOIBTOOLS),yes)
user:	ipoibtools
install_user:	install_ipoibtools
endif

ifeq ($(WITH_TVFLASH),yes)
user:	tvflash
install_user:	install_tvflash
endif

ifeq ($(WITH_MSTFLINT),yes)
user:	mstflint
install_user:	install_mstflint
endif

ifeq ($(WITH_SDPNETSTAT),yes)
user:	sdpnetstat
install_user:	install_sdpnetstat
endif

ifeq ($(WITH_SDP),yes)
user:	libsdp
install_user:	install_libsdp
endif

ifeq ($(WITH_MANAGEMENT_LIBS),yes)
user:	libibcommon libibumad libibmad
install_user:	install_libibcommon install_libibumad install_libibmad
endif

ifeq ($(WITH_OSM),yes)
user:	osm
install_user:	install_osm
endif

ifeq ($(WITH_DIAGS),yes)
user:	diags
install_user:	install_diags
endif

ifeq ($(WITH_RDMACM),yes)
user:	librdmacm
install_user:	install_librdmacm
endif

ifeq ($(WITH_DAPL),yes)
user:	dapl
install_user:	install_dapl
endif

#########################
#	make user	#
#########################
user:
	@echo "Building user level applications"
	
libibverbs:
	@echo "Make libibverbs started"
	$(MAKE) -C $(SRC)userspace/libibverbs
	@echo "Make libibverbs done"
	
libmthca: libibverbs
	@echo "Make libmthca started"
	$(MAKE) -C $(SRC)userspace/libmthca \
	AM_LDFLAGS="-L../libibverbs/src -libverbs"
	@echo "Make libmthca done"
	
libipathverbs: libibverbs
	@echo "Make libipathverbs started"
	$(MAKE) -C $(SRC)userspace/libipathverbs \
	AM_LDFLAGS="-L../libibverbs/src -libverbs"
	@echo "Make libipathverbs done"
	
libehca: libibverbs
	@echo "Make libehca started"
	$(MAKE) -C $(SRC)userspace/libehca \
	AM_LDFLAGS="-L../libibverbs/src -libverbs"
	@echo "Make libehca done"

libcxgb3: libibverbs
	@echo "Make libcxgb3 started"
	$(MAKE) -C $(SRC)userspace/libcxgb3 \
	AM_LDFLAGS="-L../libibverbs/src -libverbs"
	@echo "Make libcxgb3 done"

libibcm: libibverbs
	@echo "Make libibcm started"
	$(MAKE) -C $(SRC)userspace/libibcm \
	CPPFLAGS="-I../libibverbs/include" \
	AM_LDFLAGS="-L../libibverbs/src -libverbs"
	@echo "Make libibcm done"


	# $(MAKE) -C $(SRC)userspace/useraccess-lib
perftest: libibverbs librdmacm
	@echo "Make perftest started"
	$(MAKE) -C $(SRC)userspace/perftest \
	CPPFLAGS="-I../libibverbs/include -I../librdmacm/include" \
	LDFLAGS="-L../libibverbs/src/.libs -libverbs -L../librdmacm/src/.libs -lrdmacm"
	@echo "Make perftest done"

srptools: libibverbs libibumad libibcommon
	@echo "Make srptools started"
	$(MAKE) -C $(SRC)userspace/srptools \
	CPPFLAGS="-I../libibverbs/include -I../management/libibumad/include -I../management/libibcommon/include" \
    	AM_LDFLAGS="-L../libibverbs/src/.libs -libverbs \
    	-L../management/libibumad/.libs -libumad \
	-L../management/libibcommon/.libs -libcommon"
	@echo "Make srptools done"

qlvnictools: libibverbs libibumad libibcommon
	@echo "Make qlvnictools started"
	$(MAKE) -C $(SRC)userspace/qlvnictools/ibvexdmtools \
	CPPFLAGS="-I../../libibverbs/include -I../../management/libibumad/include -I../../management/libibcommon/include" \
	AM_LDFLAGS="-L../../libibverbs/src/.libs -libverbs \
	-L../../management/libibumad/.libs -libumad \
	-L../../management/libibcommon/.libs -libcommon"
	@echo "Make qlvnictools done"

ipoibtools:
	@echo "Make ipoibtools started"
	$(MAKE) -C $(SRC)userspace/ipoibtools
	$(MAKE) -C $(SRC)userspace/ipoibtools/iproute2 ip
	@echo "Make ipoibtools done"
    
tvflash:
	@echo "Make tvflash started"
	$(MAKE) -C $(SRC)userspace/tvflash
	@echo "Make tvflash done"

mstflint:
	@echo "Make mstflint started"
	$(MAKE) -C $(SRC)userspace/mstflint
	@echo "Make mstflint done"

sdpnetstat:
	@echo "Make sdpnetstat started"
	( while echo 2>/dev/null; do true; done ) | $(MAKE) -C $(SRC)userspace/sdpnetstat
	@echo "Make sdpnetstat done"

libsdp:
	@echo "Make libsdp started"
	$(MAKE) -C $(SRC)userspace/libsdp
	@echo "Make libsdp done"
	
libibcommon:
	@echo "Make libibcommon started"
	$(MAKE) -C $(SRC)userspace/management/libibcommon
	@echo "Make libibcommon done"

libibumad: libibverbs libibcommon
	@echo "Make libibumad started"
	$(MAKE) -C $(SRC)userspace/management/libibumad \
	CPPFLAGS="-I../../libibverbs/include -I../libibcommon/include" \
	AM_LDFLAGS="-L../libibcommon -libcommon"
	@echo "Make libibumad done"

libibmad: libibcommon libibumad
	@echo "Make libibmad started"
	$(MAKE) -C $(SRC)userspace/management/libibmad \
	CPPFLAGS="-I../libibcommon/include -I../libibumad/include" \
	AM_LDFLAGS="-L../libibcommon -libcommon -L../libibumad -libumad"
	@echo "Make libibmad done"

osm: libibcommon libibumad
	@echo "Make osm started"
	$(MAKE) -C $(SRC)userspace/management/osm \
	CPPFLAGS="-I../../libibcommon/include -I../../libibumad/include" \
	AM_LDFLAGS="-L../../libibcommon -libcommon -L../../libibumad -libumad"
	@echo "Make osm done"

diags: libibcommon libibumad libibmad osm
	@echo "Make diags started"
	# W/A to build saquery
	cd $(SRC)userspace/management/osm ; \
	ln -s include infiniband; \
	cd -
	$(MAKE) -C $(SRC)userspace/management/diags/ \
	src_ibaddr_LDADD=$(src_diags_LDADD) \
	src_ibnetdiscover_LDADD=$(src_diags_LDADD) \
	src_ibping_LDADD=$(src_diags_LDADD) \
	src_ibportstate_LDADD=$(src_diags_LDADD) \
	src_ibroute_LDADD=$(src_diags_LDADD) \
	src_ibstat_LDADD=$(src_diags_LDADD) \
	src_ibsysstat_LDADD=$(src_diags_LDADD) \
	src_ibtracert_LDADD=$(src_diags_LDADD) \
	src_perfquery_LDADD=$(src_diags_LDADD) \
	src_sminfo_LDADD=$(src_diags_LDADD) \
	src_smpdump_LDADD=$(src_diags_LDADD) \
	src_smpquery_LDADD=$(src_diags_LDADD) \
	src_saquery_LDADD=$(src_diags_LDADD) \
	src_ibaddr_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibnetdiscover_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibping_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibportstate_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibroute_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibstat_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibsysstat_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibtracert_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_perfquery_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_sminfo_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_smpdump_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_smpquery_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_saquery_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	INCLUDES="-I./include -I../osm -I../osm/include -I./../libibcommon/include -I./../libibumad/include -I./../libibmad/include \
	-I./../libibcommon/include/infiniband -I./../libibumad/include/infiniband -I./../libibmad/include/infiniband" \
	CPPFLAGS="-I../libibcommon/include -I../libibumad/include" \
	AM_LDFLAGS="-L../libibcommon -libcommon -L../libibumad -libumad \
		    -L../libibmad -libmad \
		    -L../osm/opensm -lopensm -L../osm/libvendor -losmvendor -L../osm/complib -losmcomp"
	@echo "Make diags done"

librdmacm: libibverbs
	@echo "Make librdmacm started"
	$(MAKE) -C $(SRC)userspace/librdmacm \
	CPPFLAGS="-I../libibverbs/include" \
	AM_LDFLAGS="-L../libibverbs/src -libverbs"
	@echo "Make librdmacm done"

dapl: libibverbs librdmacm
	@echo "Make dapl started"
	$(MAKE) -C $(SRC)userspace/dapl \
	CPPFLAGS="-I../libibverbs/include/infiniband -I../librdmacm/include \
	-I../libibverbs/include -I../../dat/include" \
	AM_LDFLAGS="-L$(CWD)/$(SRC)userspace/libibverbs/src -libverbs -L$(CWD)/$(SRC)userspace/librdmacm/src/ -lrdmacm"
	@echo "Make dapl done"

#########################
#	Install user	#
#########################
install_user:

	@echo "Installing user level"
	# Copy uninstall script and configuretion files
	if [ -e uninstall.sh ]; then \
		mkdir -p $(DESTDIR)/$(prefix); \
		install -m 0755 uninstall.sh $(DESTDIR)/$(prefix)/uninstall_gen2.sh; \
	fi
    # @/sbin/ldconfig
	
install_libibverbs:
	$(MAKE) -C $(SRC)userspace/libibverbs install
	
install_libmthca:	install_libibverbs
	$(MAKE) -C $(SRC)userspace/libmthca install
	
install_libipathverbs:	install_libibverbs
	$(MAKE) -C $(SRC)userspace/libipathverbs install
	
install_libehca:	install_libibverbs
	$(MAKE) -C $(SRC)userspace/libehca install
	
install_libcxgb3:	install_libibverbs
	$(MAKE) -C $(SRC)userspace/libcxgb3 install
	
install_libibcm:	install_libmthca
	$(MAKE) -C $(SRC)userspace/libibcm install
	
	# $(MAKE) -C $(SRC)userspace/useraccess-lib install
	# $(MAKE) -C $(SRC)userspace/perftest install
	# $(MAKE) -C $(SRC)userspace/mstflint install

install_libsdp:
	$(MAKE) -C $(SRC)userspace/libsdp install

	@echo "Installing management"

install_librdmacm:
	$(MAKE) -C $(SRC)userspace/librdmacm install

install_libibcommon:	
	$(MAKE) -C $(SRC)userspace/management/libibcommon install
	
install_libibumad:	install_libibverbs install_libibcommon
	$(MAKE) -C $(SRC)userspace/management/libibumad install

install_libibmad:	install_libibcommon install_libibumad
	$(MAKE) -C $(SRC)userspace/management/libibmad install

install_osm:	install_libibcommon install_libibumad
	$(MAKE) -C $(SRC)userspace/management/osm install \
	CFLAGS="-I../../libibumad/include -I../../libibcommon/include" \
	AM_LDFLAGS="-L../../libibumad"

#install_diags: $(foreach d, $(DIAGS), install_diags/${d})
#
#install_diags/%: install_libibcommon install_libibumad install_libibmad
#	$(MAKE) -C $(SRC)userspace/management/diags/$* install src_$*_DEPENDENCIES=

install_diags: install_libibcommon install_libibumad install_libibmad
	$(MAKE) -C $(SRC)userspace/management/diags install \
	src_ibaddr_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibnetdiscover_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibping_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibportstate_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibroute_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibstat_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibsysstat_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_ibtracert_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_perfquery_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_sminfo_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_smpdump_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_smpquery_DEPENDENCIES=$(src_diags_DEPENDENCIES) \
	src_saquery_DEPENDENCIES=$(src_diags_DEPENDENCIES)

	sed -i -e "s@/usr/local/bin@$(prefix)/bin@g" $(DESTDIR)/$(prefix)/bin/*

install_mstflint:
	install -d $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/mstflint/mstmread $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/mstflint/mstmwrite $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/mstflint/mstflint $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/mstflint/mstregdump $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/mstflint/mstvpd $(DESTDIR)/$(prefix)/bin
	install -m 0644 $(SRC)userspace/mstflint/mtcr.h $(DESTDIR)/$(prefix)/include
		
install_sdpnetstat:
	install -d $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/sdpnetstat/netstat $(DESTDIR)/$(prefix)/bin/sdpnetstat
	
install_perftest:	install_libibverbs install_librdmacm
	# Copy binaries
	install -d $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/perftest/ib_rdma_lat $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/perftest/ib_rdma_bw $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/perftest/ib_write_lat $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/perftest/ib_write_bw $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/perftest/ib_send_lat $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/perftest/ib_send_bw $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/perftest/ib_read_lat $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/perftest/ib_read_bw $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/perftest/ib_write_bw_postlist $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/perftest/runme $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/perftest/ib_clock_test $(DESTDIR)/$(prefix)/bin
		
install_srptools:
	$(MAKE) -C $(SRC)userspace/srptools install
		
install_qlvnictools:
	install -d $(DESTDIR)/$(prefix)/sbin
	$(MAKE) -C $(SRC)userspace/qlvnictools/ibvexdmtools install
	install -m 0754 $(SRC)userspace/qlvnictools/ql_vnic $(DESTDIR)/etc/init.d/
	install -m 0754 $(SRC)userspace/qlvnictools/vnic_parser.pl $(DESTDIR)/$(prefix)/sbin
		
install_ipoibtools:
	install -d $(DESTDIR)/$(prefix)/bin
	install -d $(DESTDIR)/$(prefix)/sbin
	install -m 0755 $(SRC)userspace/ipoibtools/arping $(DESTDIR)/$(prefix)/sbin/ipoibarping
	install -m 0755 $(SRC)userspace/ipoibtools/mcasthandle $(DESTDIR)/$(prefix)/bin
	install -m 0755 $(SRC)userspace/ipoibtools/iproute2/ip/ip $(DESTDIR)/$(prefix)/sbin/ha
	install -m 0755 $(SRC)userspace/ipoibtools/ipoib_ha.pl $(DESTDIR)/$(prefix)/bin
	sed -i -e "s@/sbin/ip @$(prefix)/sbin/ha @g" $(DESTDIR)/$(prefix)/bin/ipoib_ha.pl
	sed -i -e "s@/sbin/arping @$(prefix)/sbin/ipoibarping @g" $(DESTDIR)/$(prefix)/bin/ipoib_ha.pl

install_tvflash:
	$(MAKE) -C $(SRC)userspace/tvflash install

install_dapl:   install_libibverbs install_librdmacm
	$(MAKE) -C $(SRC)userspace/dapl install

clean: clean_user

clean_user:
	$(MAKE) -C $(SRC)userspace/libibverbs clean
	$(MAKE) -C $(SRC)userspace/libmthca clean
	$(MAKE) -C $(SRC)userspace/libipathverbs clean
	$(MAKE) -C $(SRC)userspace/libehca clean
	$(MAKE) -C $(SRC)userspace/libcxgb3 clean
	$(MAKE) -C $(SRC)userspace/libibcm clean
	# $(MAKE) -C $(SRC)userspace/useraccess-lib clean
	$(MAKE) -C $(SRC)userspace/perftest clean
	$(MAKE) -C $(SRC)userspace/srptools clean
	$(MAKE) -C $(SRC)userspace/qlvnictools/ibvexdmtools clean
	$(MAKE) -C $(SRC)userspace/ipoibtools clean
	$(MAKE) -C $(SRC)userspace/tvflash clean
	$(MAKE) -C $(SRC)userspace/mstflint clean
	$(MAKE) -C $(SRC)userspace/sdpnetstat clean
	$(MAKE) -C $(SRC)userspace/libsdp clean
	$(MAKE) -C $(SRC)userspace/librdmacm clean
	$(MAKE) -C $(SRC)userspace/management/libibcommon clean
	$(MAKE) -C $(SRC)userspace/management/libibumad clean
	$(MAKE) -C $(SRC)userspace/management/libibmad clean
	$(MAKE) -C $(SRC)userspace/management/osm clean
	$(MAKE) -C $(SRC)userspace/management/diags clean
	$(MAKE) -C $(SRC)userspace/dapl clean


help:
	@echo
	@echo user: 		build userpspace
	@echo all: 		build userspace
	@echo
	@echo install_user:	install userspace binaries under prefix
	@echo install:		run install_user
	@echo
	@echo clean:		delete userspace binaries
	@echo clean_user:	delete userspace binaries
	@echo
